/**
 * 
 */
package pe.bf.extranet.web.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

import org.apache.commons.lang.StringUtils;

/**
 *  rfigueroa
 * 
 */
public class FileParser {

	/**
	 * 
	 */
	public FileParser() {
	}

	/**
	 * 
	 * @param fileInputStream
	 * @return
	 * @throws Exception
	 */
	public static CuentaFile parseCuentaFile(FileInputStream fileInputStream)
			throws Exception {

		int line = 1;

		Scanner scanner = new Scanner(fileInputStream);

		CuentaFile cuentaFile = new CuentaFile();
		cuentaFile.setDetalleCuentaFileList(new ArrayList<DetalleCuentaFile>());
		DetalleCuentaFile detalleCuentaFile = null;
		while (scanner.hasNext()) {

			String stringLine = scanner.nextLine();
			System.out.println(stringLine);
			if (line == 1) {

				if (stringLine.length() != 56) {
					throw new FileFormatException(
							"La longitud de la cabecera del archivo es incorrecta.");
				}

				String ruc = stringLine.substring(0, 11);
				String nombreEmpresa = stringLine.substring(11, 51);
				String nroRegistros = stringLine.substring(51, 56);

				System.out.println(nombreEmpresa);

				cuentaFile.setRuc(ruc);
				cuentaFile.setNombreEmpresa(nombreEmpresa);
				cuentaFile.setNroRegistros(nroRegistros);

				line++;
				continue;
			}

			detalleCuentaFile = new DetalleCuentaFile();

			if (stringLine.length() != 202) {
				throw new FileFormatException("La longitud del registro nro "
						+ line + " es incorrecta.");
			}

			String tipoDoc = stringLine.substring(0, 2);
			String nroDoc = stringLine.substring(2, 17);
			String nombresApellidos = stringLine.substring(17, 67);
			String sexo = stringLine.substring(67, 68);
			String fechaNacimiento = stringLine.substring(68, 76);
			String estadoCivil = stringLine.substring(76, 77);
			String nacionalidad = stringLine.substring(77, 81);
			String ocupacion = stringLine.substring(81, 85);
			String telefono = stringLine.substring(85, 95);
			String direccion = stringLine.substring(95, 165);
			String distrito = stringLine.substring(165, 195);
			String ubigeo = stringLine.substring(195, 201);
			String moneda = stringLine.substring(201, 202);

			detalleCuentaFile.setTipoDoc(tipoDoc);
			detalleCuentaFile.setNroDoc(nroDoc);
			detalleCuentaFile.setNombresApellidos(nombresApellidos);
			detalleCuentaFile.setSexo(sexo);
			detalleCuentaFile.setFechaNacimiento(fechaNacimiento);
			detalleCuentaFile.setEstadoCivil(estadoCivil);
			detalleCuentaFile.setNacionalidad(nacionalidad);
			detalleCuentaFile.setOcupacion(ocupacion);
			detalleCuentaFile.setTelefono(telefono);
			detalleCuentaFile.setDireccion(direccion);
			detalleCuentaFile.setDistrito(distrito);
			detalleCuentaFile.setUbigeo(ubigeo);
			detalleCuentaFile.setMoneda(moneda);

			validarCuentaFile(detalleCuentaFile);

			cuentaFile.getDetalleCuentaFileList().add(detalleCuentaFile);
			line++;
		}
		return cuentaFile;
	}

	/**
	 * 
	 * @param detalleCuentaFile
	 */
	private static void validarCuentaFile(DetalleCuentaFile detalleCuentaFile) {

	}

	/**
	 * 
	 * @param fileInputStream
	 * @return
	 * @throws Exception
	 */
	public static AbonoFile parseAbonoFile(FileInputStream fileInputStream)
			throws Exception {

		int line = 1;

		Scanner scanner = new Scanner(fileInputStream);

		AbonoFile abonoFile = new AbonoFile();
		abonoFile.setDetalleAbonoFileList(new ArrayList<DetalleAbonoFile>());
		DetalleAbonoFile detalleAbonoFile = null;
		while (scanner.hasNext()) {

			String stringLine = scanner.nextLine();

			System.out.println(stringLine);

			if (line == 1) {

				if (stringLine.length() != 107) {
					throw new FileFormatException(
							"La longitud de la cabecera del archivo es incorrecta.");
				}

				String planillaNueva = stringLine.substring(0, 1);
				String tipoRegistro = stringLine.substring(1, 2);
				String tipoPagoMasivo = stringLine.substring(2, 3);
				String tipoProducto = stringLine.substring(3, 4);
				String nroCuenta = stringLine.substring(4, 24);
				String moneda = stringLine.substring(24, 26);
				String importeCargar = stringLine.substring(26, 41);
				String fechaProcesar = stringLine.substring(41, 49);
				String referencia = stringLine.substring(49, 69);
				String totalControl = stringLine.substring(69, 84);
				String nroTotalRegistrosAbonar = stringLine.substring(84, 90);
				String subTipoPagoMasivo = stringLine.substring(90, 91);
				String identificadorDividendos = stringLine.substring(91, 106);
				String indicadorNotaCargo = stringLine.substring(106, 107);

				abonoFile.setPlanillaNueva(planillaNueva);
				abonoFile.setTipoRegistro(tipoRegistro);
				abonoFile.setTipoPagoMasivo(tipoPagoMasivo);
				abonoFile.setTipoProducto(tipoProducto);
				abonoFile.setNroCuenta(nroCuenta);
				abonoFile.setMoneda(moneda);
				abonoFile.setImporteCargar(importeCargar);
				abonoFile.setFechaProcesar(fechaProcesar);
				abonoFile.setReferencia(referencia);
				abonoFile.setTotalControl(totalControl);
				abonoFile.setNroTotalRegistrosAbonar(nroTotalRegistrosAbonar);
				abonoFile.setSubTipoPagoMasivo(subTipoPagoMasivo);
				abonoFile.setIdentificadorDividendos(identificadorDividendos);
				abonoFile.setIndicadorNotaCargo(indicadorNotaCargo);

				line++;
				continue;
			}

			detalleAbonoFile = new DetalleAbonoFile();

			if (stringLine.length() != 137) {
				throw new FileFormatException("La longitud del registro nro "
						+ line + " es incorrecta.");
			}

			String vacio = stringLine.substring(0, 1);
			String tipoRegistro = stringLine.substring(1, 2);
			String tipoProducto = stringLine.substring(2, 3);
			String nroCuentaAbono = stringLine.substring(3, 23);
			String nombreEmpleadoBeneficiario = stringLine.substring(23, 63);
			String moneda = stringLine.substring(63, 65);
			String importeAbonar = stringLine.substring(65, 80);
			String referenciaAdicional = stringLine.substring(80, 120);
			String flagNotaAbono = stringLine.substring(120, 121);
			String tipoDocumentoIdentidad = stringLine.substring(121, 124);
			String nroDocumentoIdentidad = stringLine.substring(124, 136);
			String flagValidarIDC = stringLine.substring(136, 137);

			detalleAbonoFile.setVacio(vacio);
			detalleAbonoFile.setTipoRegistro(tipoRegistro);
			detalleAbonoFile.setTipoProducto(tipoProducto);
			detalleAbonoFile.setNroCuentaAbono(nroCuentaAbono);
			detalleAbonoFile
					.setNombreEmpleadoBeneficiario(nombreEmpleadoBeneficiario);
			detalleAbonoFile.setMoneda(moneda);
			detalleAbonoFile.setImporteAbonar(importeAbonar);
			detalleAbonoFile.setReferenciaAdicional(referenciaAdicional);
			detalleAbonoFile.setFlagNotaAbono(flagNotaAbono);
			detalleAbonoFile.setTipoDocumentoIdentidad(tipoDocumentoIdentidad);
			detalleAbonoFile.setNroDocumentoIdentidad(nroDocumentoIdentidad);
			detalleAbonoFile.setFlagValidarIDC(flagValidarIDC);

			validarAbonoFile(detalleAbonoFile);
System.out.println("-"+detalleAbonoFile.getImporteAbonar());
			abonoFile.getDetalleAbonoFileList().add(detalleAbonoFile);

			line++;
		}

		return abonoFile;
	}

	private static void validarAbonoFile(DetalleAbonoFile detalleAbonoFile) {

	}

	public static void main(String[] args) throws Exception {
		String path1 = "C:/Users/Andres/Desktop/banco saga/AperMasHaberes_20100128056_20121017.txt";
		String path2 = "C:/Users/Andres/Desktop/banco saga/abonos-soles_15112012_IOH.txt";
		parseCuentaFile(new FileInputStream(new File(path1)));
		parseAbonoFile(new FileInputStream(new File(path2)));
	}

}
